package com.zwh.wx.handler;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 处理微信关注事件的消息处理器
 * 该类实现了WxChatMsgHandler接口，用于处理微信聊天中的关注事件
 */
@Component
@Slf4j
public class SubscribeMsgHandler implements WxChatMsgHandler {

    /**
     * 获取当前处理器处理的消息类型
     *
     * @return WxChatMsgTypeEnum.SUBSCRIBE 表示该处理器处理的是关注事件类型的消息
     */
    @Override
    public WxChatMsgTypeEnum getMsgType() {
        return WxChatMsgTypeEnum.SUBSCRIBE;
    }

    /**
     * 处理关注事件消息
     * 当用户关注公众号时，执行此方法来处理关注事件
     *
     * @param messageMap 包含微信服务器推送的消息参数的映射
     * @return 返回给用户的响应消息的XML字符串
     */
    @Override
    public String dealMsg(Map<String, String> messageMap) {
        // 记录用户关注事件的日志信息
        log.info("触发用户关注事件！");

        // 提取消息中的用户信息
        String fromUserName = messageMap.get("FromUserName");
        String toUserName = messageMap.get("ToUserName");

        // 定义关注回复的内容
        String subscribeContent = "感谢您的关注，我是经典鸡翅！欢迎来学习从0到1社区项目";

        // 构造回复用户的XML消息
        String content = "<xml>\n" +
                "  <ToUserName><![CDATA[" + fromUserName + "]]></ToUserName>\n" +
                "  <FromUserName><![CDATA[" + toUserName + "]]></FromUserName>\n" +
                "  <CreateTime>12345678</CreateTime>\n" +
                "  <MsgType><![CDATA[text]]></MsgType>\n" +
                "  <Content><![CDATA[" + subscribeContent + "]]></Content>\n" +
                "</xml>";

        // 返回构造的XML消息
        return content;
    }

}
